(function($) {	
  $.facebox = function(theme){
	  if(theme != window.undefined && theme != $.facebox.settings.theme) 
		  $.facebox.init(theme);
	  $(window).bind('scroll', $.facebox.center);
	  $(window).bind('resize', $.facebox.center);
  }	
	
  $.facebox.settings = {
	theme    	:'',
	faceboxId	:'#facebox',
    loadingImg 	:'loading.gif',
    closeImg   	:'close.png',
    imageTypes  :[ 'png', 'jpg', 'jpeg', 'gif' ],
    defHeight	:'600px',
    html  		:'\
  	<div class="popup"> \
      <table class="table"> \
        <tbody> \
          <tr> \
            <td class="shadow_tl"/><td class="shadow_b"/><td class="shadow_tr"/> \
          </tr> \
          <tr> \
            <td class="shadow_b"/> \
            <td class="body"> \
              <table class="header"> \
      			<tr> \
      				<td style="text-align: left;"><span class="title"></span></td> \
      				<td style="text-align: right;"><a href="#" class="close"><img src="'+this.closeImg+'" class="close_image"/></a></td> \
      			</tr> \
      		  </table> \
              <div class="content"> \
              </div> \
            </td> \
            <td class="shadow_b"/> \
          </tr> \
          <tr> \
            <td class="shadow_bl"/><td class="shadow_b"/><td class="shadow_br"/> \
          </tr> \
        </tbody> \
      </table> \
    </div>'
  }

  $.facebox.loading = function() {
	  var s = $.facebox.settings;
	  if ($(s.faceboxId+' .loading').length == 1) return true;
	  $(s.faceboxId+' .content').empty();
	  $(s.faceboxId+' .body').children().hide().end().append('<div class="loading"><img src="'+(s.theme+'/'+s.loadingImg)+'"/></div>');		
	  var pageScroll = $.wis.common.getPageScroll();
	  var pageSize   = $.wis.common.getPageSize();
	  $(s.faceboxId).css({top: pageScroll[1],left: pageScroll[0],width: pageSize[0],height: pageSize[1]}).show();
	  $.facebox.center();
	  $(document).bind('keydown.facebox', function(e) {
		  if (e.keyCode == 27) $.facebox.close();
	  });
  }
  
  $.facebox.center = function() {
	  var s = $.facebox.settings;
	  var pHeight = $(s.faceboxId+' .popup').height();
	  var pWidth  = $(s.faceboxId+' .popup').width();
	  var pageScroll = $.wis.common.getPageScroll();
	  var pageSize   = $.wis.common.getPageSize();	  
	  var pTop = Math.round(45*(pageSize[1]-pHeight)/pageSize[1]);
	  if(pHeight>pageSize[1])
		  pTop = 0;
	  $(s.faceboxId).css({top: pageScroll[1], left: pageScroll[0], width: pageSize[0], height: pageSize[1]});
	  $(s.faceboxId+' .popup').css({top: pTop+'%'});
  }

  $.facebox.reveal = function(data, klass) {
	  var s = $.facebox.settings;
	  if (klass) $(s.faceboxId+' .content').addClass(klass);
	  $(s.faceboxId+' .content').css({height: 'auto'});
	  $(s.faceboxId+' .content').append(data);
	  var h  = $(s.faceboxId+' .content').height();
	  var dh = 0; 
	  if(s.defHeight.substring(s.defHeight.length-2,s.defHeight.length)=='px')
		  dh = eval(s.defHeight.substring(0,s.defHeight.length-2));
	  if(s.defHeight.substring(s.defHeight.length-1,s.defHeight.length)=='%')
		  dh = eval(s.defHeight.substring(0,s.defHeight.length-2))*$.wis.common.getPageSize()[1];		  
	  if(h>dh)
		  $(s.faceboxId+' .content').css({height: dh});
	  $(s.faceboxId+' .loading').remove();
	  $(s.faceboxId+' .body').children().fadeIn('fast'); 
	  $.facebox.center();
  }

  $.facebox.close = function() {
	  $(document).trigger('close.facebox');    
	  return false;
  }

  $(document).bind('close.facebox', function() {
	  var s = $.facebox.settings;
	  $(document).unbind('keydown.facebox');
	  $(s.faceboxId).fadeOut($(s.faceboxId).fadeOut($.facebox.init(s.theme)));
  })
  
  $.facebox.show = function(target,title,theme){
	  var s = $.facebox.settings;
	  if(theme != window.undefined && theme != s.theme) 
		  $.facebox.init(theme);
	  $.facebox.loading(true);	  
	  var imageTypes = s.imageTypes.join('|');
	  imageTypes = new RegExp('\.' + imageTypes + '$', 'i');
	  $(s.faceboxId+' .title').text(title);
	  if (target.match(/#/)) { 	// div
    	  $.facebox.reveal($(target).clone().show(), s.faceboxId);      
      } else if (target.match(imageTypes)) { // image
    	  var image = new Image()
    	  image.onload = function() {
    		  $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', s.faceboxId);
    	  }
    	  image.src = target;      
      } else { // ajax
    	  $.get(target, function(data) {$.facebox.reveal(data, s.faceboxId)});
      }
  }

  $.facebox.init = function(theme) {
	  var s = $.facebox.settings;
	  s.theme = theme;
	  $(s.faceboxId).remove();
	  $('body').append('<div id="'+s.faceboxId.substring(1,s.faceboxId.length)+'" style="display:none;">'+s.html+'</div>');	    
	  var preload = [ new Image(), new Image() ];
	  preload[0].src = s.theme+'/'+s.closeImg;
	  preload[1].src = s.theme+'/'+s.loadingImg;
	  $(s.faceboxId).find('.b:first, .bl, .br, .tl, .tr').each(function() {
		  preload.push(new Image());
		  preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1');
	  });	    
	  $(s.faceboxId+' .close').click($.facebox.close);
  	  $(s.faceboxId+' .close_image').attr('src', s.theme+'/'+s.closeImg);
  	  var cssHeight = $(s.faceboxId+ ' .content').css('height');
  	  if(cssHeight && cssHeight!='')
  		s.defHeight = cssHeight;  	  
  }
})(jQuery);